"""
当使用flask shell时，该命令预先导入应用实例app

flask shell的绝妙之处不在于它预先导入了app，而是你可以配置一个“shell上下文”，也就是可以预先导入一份对象列表。
app.shell_context_processor装饰器将该函数注册为一个shell上下文函数。 当flask shell命令运行时，它会调用这个函数并在shell会话中注册它返回的项目
"""

from app import create_app, db, cli
from app.models import User, Post

app = create_app()
cli.register(app)

@app.shell_context_processor
def make_shell_context():
    flask_shell_objet_dict = {'db': db, 'User': User, 'Post': Post}
    app.logger.info('running make_shell_context()')
    for obj_key in  flask_shell_objet_dict.keys():
        app.logger.info(f'{obj_key}: {flask_shell_objet_dict[obj_key]}')
    return flask_shell_objet_dict

if __name__ == '__main__':
    app.run(debug=True)